package ar.uba.fi.algo3.titiritero.vista;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import ar.uba.fi.algo3.titiritero.SuperficieDeDibujo;
import ar.uba.fi.algo3.titiritero.controlador.CentralControlador;
/*
 * ESta clase representa la superficie de dibujo, tipicamente sera el formulario
 * principal de la aplicacion y donde se dibujara la vista.
 * Esta clase utiliza la tecnica de doble buffering para evitar los efectos de flicking
 */
public class Ventana extends Frame implements SuperficieDeDibujo{

	/**
	 * Esta yerba es generada automatica y aun no se su utilidad
	 */
	private static final long serialVersionUID = 1L;
	
	public Ventana(CentralControlador unControlador){
		this.addMouseListener(unControlador);
		setLocationRelativeTo(null);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				dispose();
				System.exit(0);
			}
		});
	}
	
	public Ventana(int ancho,int alto, CentralControlador unControlador){
		this(unControlador);
		setSize(ancho, alto);
	}

	/* 
	 *Esta es la imagen en que se realiza todo el dibujo utilizando la tecnica
	 *de doble buffering.
	 */
    private Image imagen;
    
	public void paint(Graphics g) {
		g.drawImage(this.imagen, 8, 28, null);
	}

	public void limpiar() {
		if(this.imagen == null) {
			this.imagen = this.createImage(getSize().width, getSize().height);
		}
		Graphics superficieParaDibujar =  this.imagen.getGraphics();
		superficieParaDibujar.setColor(Color.WHITE);// 
		superficieParaDibujar.fillRect(0, 0, this.getSize().width, this.getSize().height);		
	}
	
	public Graphics getBuffer(){
		return this.imagen.getGraphics();
	}	
	
	public void actualizar(){
		this.repaint();
	}
}
